package cn.autumnorange.app.common.rpc.lock;

import java.lang.annotation.*;

/** 锁标记 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.METHOD})
@Inherited
@Documented
public @interface RPCIdempotentLockTarget {
  /**
   * 1 锁住时间必须>远程请求者设定的请求超时时间+连接超时时间, 如果锁住时间在小于远程请求者设定的请求超时时间,该锁在请求超时时间内被释放,
   * 但该客户端执行时间超过远程请求者设定的请求超时时间,导致远程请求者进行重试其他客户端或者本客户端(这里就是第一步为什么要+连接超时时间的原因,因为没加的话有可能在连接时间内释放锁),
   * 此时重试时发现没用锁住该资源于是再此执行相应代码导致非幂等,一次流程调用变成多次流程调用
   *
   * @return
   */
  //  int lockTime();

  /**
   * 整个请求发起的id,雪花id+机器标识id
   *
   * @return
   */
  String rpcLock() default "";

  /**
   * 指定检索入参具体位置下标 默认-1则从第一个参数开始检索
   * @return
   */
  int index() default -1;

}
